/*
 * 
 */
package co.edu.udistrital.erpgrid.ejecutor;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;

import org.jallinone.commons.server.SimpleBeansFactory;

import co.edu.udistrital.erpgrid.jaio.commons.JaioObjectVO;
import co.edu.udistrital.erpgrid.util.XmlUtil;

/**
 * The Clase EjecutorJaio. Utilizada para invocar la ejecución de las funciones de servidor en los nodos de la grilla.
 */
public class EjecutorJaio {


	/**
	 * Clase invocada desde el ejecutor de trabajos de globus para realizar la operacion.
	 * 
	 * @param args, el xml de la peticion a ejecutar.
	 * @throws IOException
	 */
	public static void main(String[] args){
		try {
			String xml = "";
			
			if (args.length == 1) {
				xml = args[0];
			} 
			
			JaioObjectVO objectVO = (JaioObjectVO) XmlUtil.fromXml(xml);
			Object retorno = ejecutar(objectVO);
			JaioObjectVO retornoVO = new JaioObjectVO();
			retornoVO.setRetorno(retorno);
			String xmlRetorno = XmlUtil.toXml(retornoVO);
			System.out.println("InicioXml");
			System.out.println(xmlRetorno);
			System.out.println("FinXml");
		} catch (Exception e) {
			e.printStackTrace();
		}
//		System.exit(0);
	}

	/**
	 * Ejecutar. Recibe la peticion en el  objeto especificado y ejecuta el metodo seleccionado
	 *
	 * @param objectVO objeto con la peticion encapsulada
	 * @return el retorno de la peticion
	 */
	static public Object ejecutar(JaioObjectVO objectVO) {
		Object retValue = null;
		try {
			final Object bean = new SimpleBeansFactory().getBean(
					objectVO.getClazz(), true);
			Method method = objectVO.getMethod();
			retValue = method.invoke(bean, objectVO.getArgs());
			objectVO.setRetorno(retValue);
		} catch (Throwable e) {
			e.printStackTrace();
		}
		return retValue;
	}
}
